package com.phoenix.jsef.demo.shared;

import java.util.List;
import java.util.Map;
import com.phoenix.jsef.framework.*;
import com.phoenix.jsef.jdbcutils.CommandType;
import com.phoenix.jsef.demo.pojo.*;

/**   
 * @InterfaceName:  IBizVwOffice   
 * @Description:TODO(商业实体对象:CVwOffice对应提供的服务接口)   
 * @author: 李启联
 * @date:   2018-1-17 15:45:31
 * @version V1.0     
 * @Copyright: Copyright (c) 2018
 * 申明：本内容未经作者本人同意,禁止外泄以及用于其他的商业项目.
 */
public interface IBizVwOffice {
	
	/**
	 * 通用的搜索方法：得到所有的实体对象集合
	 * @param filter 过滤条件的Map键值对
	 * @return 返回查找到的CVwOfficeEntity 实体对象集合
	 * @throws Exception
	 */
	public EntityCollection getCollection(Map<String,Object> filter) throws Exception;
	
	/**
	 * 通用的搜索方法：得到所有的实体对象集合列表
	 * @param filter 过滤条件的Map键值对
	 * @return 返回查找到的CVwOfficeEntity 实体对象集合列表
	 * @throws Exception
	 */
	public List<CVwOfficeEntity> getList(Map<String,Object> filter) throws Exception;

    /**
    * 通过slq查询语句或执行存储过程,返回对应实体集合,会自动查询并填充实体里定义的其他实体对象或集合
    * @param commandType 执行类型[SQL语句或存储过程]
    * @param commandText SQL语句或存储过程名称
    * @param obj 执行参数
    * @return
    * @throws Exception
    */
    public List<CVwOfficeEntity> getListBySql(CommandType commandType, String commandText, Object... obj) throws Exception;

    /**
    * 根据过滤条件和排序字段，得到对应页码和每页条目数的 PageInfo对象
    * @param filter 过滤条件的Map键值对
    * @param sorter 排序的Map键值对
    * @param pageIndex 显示的当前页码
    * @param pageSize 每页显示的记录条数
    * @return 分页后的数据对象集合：PageInfo对象
    * @throws Exception
    */
    public PageInfo<CVwOfficeEntity> getPageInfo(Map<String,Object> filter,Map<String,String> sorter,Integer pageIndex,Integer pageSize) throws Exception;

    /**
	 * 通过Id查找对应的商业实体对象
	 * @param id 商业实体对象的Id
	 * @return 单个实体对象
	 * @throws Exception
	 */
	public CVwOfficeEntity getEntityById(String id) throws Exception;
	
	/**
	 * 通过Id查找对应的商业实体对象的 Map数据 ,该返回结果数据结构对应于数据库中的DataRow
	 * @param id 商业实体对象的Id
	 * @return 单个实体对象的 Map数据 
	 * @throws Exception
	 */
	public Map<String,Object> getMapById(String id) throws Exception;
	
	/**
	 * 将商业实体对象插入数据库
	 * @param entity 商业实体对象
	 * @return  插入成功返回true, 失败返回false
	 * @throws Exception
	 */
	public boolean insert(CVwOfficeEntity entity) throws Exception;
	
	/**
	 * 将商业实体对象更新到数据库(支持级联更新：需要在对应实体模型对象中标记级联更新实体对象 例： cascadeUpdateEntitys={A.class,B.class})
	 * @param entity 商业实体对象
	 * @return  更新成功返回true, 失败返回false
	 * @throws Exception
	 */
	public boolean update(CVwOfficeEntity entity) throws Exception;
	
	/**
	 * 将商业实体对象从数据库中删除 (支持级联删除：需要在对应实体模型对象中标记级联删除实体对象 例： cascadeDeleteEntitys={A.class,B.class})
	 * @param entity 商业实体对象
	 * @return 删除成功返回true, 失败返回false
	 * @throws Exception
	 */
	public boolean delete(CVwOfficeEntity entity) throws Exception;
	
	/**
	 * 单纯的根据id的值从数据库中删除对应商业实体对象
	 * @param keyValue 商业实体对象的Id
	 * @return 删除成功返回true, 失败返回false
	 * @throws Exception
	 */
	public boolean deleteByIdForSingle(Object keyValue) throws Exception;
	


}